package log

///
// Log库
///

/// 运行状态
var (
	// LogTtypeLog 记录
	LogTtypeLog = 0
	// LogTtypeError 错误
	LogTtypeError = 1
	// LogTtypeWarn 警告
	LogTtypeWarn = 2
	// LogTtypeDebug 调试
	LogTtypeDebug = 3
)

// Port 日志库扩展接口
type Port struct {
	// Log 写日志
	Log func(Data []byte)
	// Error 写错误
	Error func(Data []byte)
	// Warn 写警告
	Warn func(Data []byte)
	// Debug 写调试
	Debug func(Data []byte)
	// LogS 写日志文本
	LogS func(Data string)
	// ErrorS 写错误文本
	ErrorS func(Data string)
	// WarnS 写警告文本
	WarnS func(Data string)
	// DebugS 写调试文本
	DebugS func(Data string)
	// GetTimeout 得到 Timeout
	GetTimeout func() *Timeout
	// Close 关闭日志
	Close func()
}

// loglist 日志列表
var loglist map[string]*Port

// init 初始化
func init() {
	loglist = make(map[string]*Port)
}

// GetLog 获得Log
func GetLog(name string) *Port {
	// 返回
	if log, ok := loglist[name]; ok {
		return log
	}
	loglist[name] = &Port{}
	return loglist[name]
}

// SetLog 设置Log
func SetLog(name string, P *Port) {
	if _, ok := loglist[name]; !ok {
		loglist[name] = P
	} else {
		// 重置数据
		loglist[name].Log = P.Log
		loglist[name].Error = P.Error
		loglist[name].Warn = P.Warn
		loglist[name].Debug = P.Debug
		loglist[name].LogS = P.LogS
		loglist[name].ErrorS = P.ErrorS
		loglist[name].WarnS = P.WarnS
		loglist[name].DebugS = P.DebugS
		loglist[name].GetTimeout = P.GetTimeout
		loglist[name].Close = P.Close
	}
}
